package br.jus.tjpe.bean;

import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import br.jus.tjpe.dominio.Parte;
import br.jus.tjpe.dominio.ParteFisica;
import br.jus.tjpe.dominio.ParteJuridica;
import br.jus.tjpe.negocio.ParteServico;
import br.jus.tjpe.otd.ParteOTD;
import br.jus.tjpe.util.MessageResource;
import br.jus.tjpe.util.MessageResourceFactory;

public class ParteBean {

	private List<ParteOTD> partes;

	private Parte parte;

	private String tipoPessoaParte;

	private ParteFisica partePessoaFisica;

	private ParteJuridica partePessoaJuridica;

	@EJB
	private ParteServico parteServico;
	
	private String nomeParte;
	
	public String getNomeParte() {
		return nomeParte;
	}

	public void setNomeParte(String nomeParte) {
		this.nomeParte = nomeParte;
	}

	public List<ParteOTD> getPartes() {
		if (partes == null) {
			carregarPartes();
		}
		return partes;
	}

	public void setPartes(List<ParteOTD> partes) {
		this.partes = partes;
	}

	public Parte getParte() {
		return parte;
	}

	public void setParte(ParteFisica parte) {
		this.parte = parte;
	}

	public ParteFisica getPartePessoaFisica() {
		return partePessoaFisica;
	}

	public void setPartePessoaFisica(ParteFisica partePessoaFisica) {
		this.partePessoaFisica = partePessoaFisica;
	}

	public ParteJuridica getPartePessoaJuridica() {
		return partePessoaJuridica;
	}

	public void setPartePessoaJuridica(ParteJuridica partePessoaJuridica) {
		this.partePessoaJuridica = partePessoaJuridica;
	}

	public void setParte(Parte parte) {
		this.parte = parte;
	}

	public String getTipoPessoaParte() {
		return tipoPessoaParte;
	}

	public void setTipoPessoaParte(String tipoPessoaParte) {
		this.tipoPessoaParte = tipoPessoaParte;
	}
	
	private void carregarPartes() {
		this.partes = ParteOTD.parseToOTD(this.parteServico.consultarPartes());
	}
	
	public String manterParte(){
		carregarPartes();
		return "manterParte";
	}

	public String cadastrarParte() {
		this.partePessoaFisica = new ParteFisica();
		this.partePessoaJuridica = new ParteJuridica();
		this.tipoPessoaParte = "PF";
		
		return "cadastrarParte";
	}

	public String removerParte() {
		this.parteServico.remover(this.parte);
		carregarPartes();
		return "manterParte";
	}

	public String editarParte() {
		
		if(this.parte instanceof ParteFisica) {
			this.partePessoaFisica = (ParteFisica) this.parte;
			this.tipoPessoaParte = "PF";
		} else {
			this.partePessoaJuridica = (ParteJuridica) this.parte;
			this.tipoPessoaParte = "PJ";
		}

		return "cadastrarParte";
	}
	
	public void consultar(){
		this.partes = ParteOTD.parseToOTD(this.parteServico.consultarPartes(this.nomeParte));
	}

	public String salvar() {
		String outcome = null;
		boolean valido = true;

		FacesContext context = FacesContext.getCurrentInstance();
		MessageResource message = MessageResourceFactory
				.createMessageResource("mensagens");

		if (this.tipoPessoaParte.equals("PF")) {
			if (this.partePessoaFisica.getNome() == null
					|| this.partePessoaFisica.getNome().isEmpty()) {
				context.addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_WARN, message
								.get("parte.nome.obrigatorio"), message
								.get("parte.nome.obrigatorio")));
				valido = false;
			}
			
			if (this.partePessoaFisica.getCpf() == null
					|| this.partePessoaFisica.getCpf().isEmpty()) {
				context.addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_WARN, message
								.get("parte.cpf.obrigatorio"), message
								.get("parte.cpf.obrigatorio")));
				valido = false;
			}
			
			this.parte = this.partePessoaFisica;
		} else {
			if (this.partePessoaJuridica.getRazaoSocial() == null
					|| this.partePessoaJuridica.getRazaoSocial().isEmpty()) {
				context.addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_WARN, message
								.get("parte.razao.social.obrigatorio"), message
								.get("parte.razao.social.obrigatorio")));
				valido = false;
			}
			
			if (this.partePessoaJuridica.getCnpj() == null
					|| this.partePessoaJuridica.getCnpj().isEmpty()) {
				context.addMessage(
						null,
						new FacesMessage(FacesMessage.SEVERITY_WARN, message
								.get("parte.cnpj.obrigatorio"), message
								.get("parte.cnpj.obrigatorio")));
				valido = false;
			}
			
			this.parte = this.partePessoaJuridica;
		}

		if (valido) {
			this.parteServico.salvar(this.parte);
			carregarPartes();
			outcome = "manterParte";
		} else {
			outcome = "cadastrarParte";
		}

		return outcome;
	}

}
